/*                          UX-Framework                               
 *                                                                 
 *  iZE Co.,Ltd. Copyright 2009 All rights reserved.          
 *  This file is distributed under the terms of the GNU Lesser 
 *  General Public License, described in file LICENSE.                                     
 */
package jp.ize.ux.components;

// {{{ imports
import jp.ize.ux.UXObject;
import jp.ize.ux.UXRange;
import jp.ize.ux.UXFont;
import jp.ize.ux.UXController;
import jp.ize.ux.UXInteraction;
import jp.ize.ux.UXResource;
import jp.ize.ux.UXFocusManager;
import jp.ize.ux.states.UXBasicState;
import jp.ize.ux.acts.Act;
import jp.ize.ux.components.UXComponent;

#if flash9
import flash.text.TextField;
#elseif flash
import flash.TextField;
#end
// }}}
// {{{ class UXTextFieldResource extends UXComponentResource
/**
 * UXTextFieldResource クラス<br>
 * UXTextFieldコンポーネントに利用されるリソース群です。
 */
class UXTextFieldResource extends UXComponentResource
{
	// {{{ public var background(default, default) : UXObject
	/**
	 * 背景となるコンポーネントです。
	 */
	public var background(default, default) : UXObject;
	// }}}
}
// }}}
// {{{ class UXTextFieldCoState
class UXTextFieldCoState
{
	// {{{ public var focused(default, default) : Bool
	/**
	 * このボタンにフォーカスが当たっているかどうかを取得、または設定します。
	 */
	public var focused(default, default) : Bool;
	// }}}
	// {{{ public var highlighted(default, default) : Bool
	/**
	 * このボタンがハイライトされているかどうかを取得、または設定します。
	 */
	public var highlighted(default, default) : Bool;
	// }}}
}
// }}}
// {{{ enum UXTextFieldExclusiveState
/**
 * UXTextFieldの各種状況を表現します。
 */
enum UXTextFieldExclusiveState
{
	/** 初期化状態にある事を意味します。*/
	INIT;
	/** 無効になっている事を意味します。*/
	DISABLE;
	/** 有効になっている事を意味します。パラメーターでは、フォーカスやハイライトの状況を保持します。*/
	ENABLE ( flags : UXTextFieldCoState );
}
// }}}
// {{{ enum UXTextFieldActEvent
enum UXTextFieldActEvent
{
}
// }}}
// {{{ class UXTextFieldAct extends ActSubject<UXTextFieldActEvent>
/**
 * UXTextFieldAct クラス<br>
 * UXTextFieldのデフォルトアクションです。
 */
class UXTextFieldAct extends ActSubject<UXTextFieldActEvent>
{
	// {{{ public function new( body: UXButton )
	/**
	 * コンストラクタです。<br>
	 */
	public function new()
	{
		super();
	}
	// }}}
	// {{{ public function uplight( s : UXTextFieldState ) : Void
	/**
	 * ボタンをハイライトした時のデフォルトアクションです。
	 */
	public function uplight( s : UXTextFieldState ) : Void
	{
	}
	// }}}
	// {{{ public function downlight( s : UXTextFieldState ) : Void
	/**
	 * ボタンのハイライトを解除した時のデフォルトアクションです。
	 */
	public function downlight( s : UXTextFieldState ) : Void
	{
	}
	// }}}
	// {{{ public function focus( s : UXTextFieldState ) : Void
	/**
	 * ボタンがフォーカスされた時のデフォルトアクションです。
	 */
	public function focus( s : UXTextFieldState ) : Void
	{
	}
	// }}}
	// {{{ public function unfocus( s : UXTextFieldState ) : Void
	/**
	 * ボタンのフォーカスが解除された時のデフォルトアクションです。
	 */
	public function unfocus( s : UXTextFieldState ) : Void
	{
	}
	// }}}
	// {{{ public function show( s : UXTextFieldState ) : Void
	/**
	 * 表示状態になった時のデフォルトアクションです。
	 */
	public function show( s : UXTextFieldState ) : Void
	{
	}
	// }}}
	// {{{ public function hide( s : UXTextFieldState ) : Void
	/**
	 * 非表示状態になった時のデフォルトアクションです。
	 */
	public function hide( s : UXTextFieldState ) : Void
	{
	}
	// }}}
}
// }}}
// {{{ class UXTextFieldState extends UXBasicState
/**
 * UXTextFieldState クラス<br>
 * UXTextFieldの現在の状態を表すオブジェクトです。
 */
class UXTextFieldState extends UXBasicState
{
	// {{{ properties

	private var _body : UXLabel;

	// }}}
	// {{{ public var resource( default, default ) : UXTextFieldResource;
	/**
	 * テキストフィールドの描画に使用するリソースです。
	 */
	public var resource( default, default ) : UXTextFieldResource;
	// }}}
	// {{{ public var textAttribute(default, default) : UXTextAttribute
	/**
	 * テキストの表示状態を示します。
	 */
	public var textAttribute(default, default) : UXTextAttribute;
	// }}}
	// {{{ public var text(getText, setText) : String;
	/**
	 * テキストフィールド内の現在のテキストを示します。
	 */
	public var text(getText, setText) : String;
	// }}}
	// {{{ public var selection(default, default) : UXRange<Int>;
	/**
	 * テキストの現在の選択範囲を示します。
	 */
	public var selection(default, default) : UXRange;
	// }}}
	// {{{ public var displayAsPassword(default, default) : Bool;
	/**
	 * テキストフィールドがパスワードテキストフィールドであるかどうかを設定します。
	 */
	public var displayAsPassword(default, default) : Bool;
	// }}}
	// {{{ public var condition( default, default) : UXTextFieldExclusiveState;
	/**
	 * enableかどうかやフォーカスが当たっているかなど各種状況を保持する変数です。
	 */
	public var condition( default, default) : UXTextFieldExclusiveState;
	// }}}
	// {{{ public var act(default, null) : UXTextFieldAct
	/**
	 * デフォルトの動きです。
	 */
	public var acts(default, null) : UXTextFieldAct;
	// }}}
	// {{{ public var focusManager(default, default) : UXFocusManager
	/**
	 * このコンポーネントが属するフォーカスグループの管理オブジェクトです。
	 * このコンポーネントがフォーカスを受け取らない場合はnullです。
	 */
	public var focusManager(default, default) : UXFocusManager;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。
	 */
	public function new()
	{
		super();
		// 
		// TODO
		// リソースの設定
		// デフォルト値の設定
	}
	// }}}
	// {{{ private function attachResource() : Void
	/**
	 * テキストフィールドに対するグローバルなリソースをresourceプロパティに取得する関数です。
	 */
	private function attachResource() : Void
	{
	}
	// }}}
	// {{{ private function getText() : String
	/**
	 * テキストを取得します。
	 */
	private function getText() : String
	{
		return "";
	}
	// }}}
	// {{{ private function setText( t : String ) : String
	/**
	 * テキストを設定します。
	 */
	private function setText( t : String ) : String
	{
		return "";
	}
	// }}}
}
// }}}
// {{{ class UXTextField extends UXComponent
/** 
 * UXTextField クラス<br>
 * テキスト入力用のコンポーネントクラスです。<br>
 *
 * @author		iZE Co., Ltd.<br>
 * @version		$Id: UXTextField.hx 20 2009-02-04 08:23:19Z yimai.v $<br>
 */
class UXTextField extends UXComponent
{
	// {{{ properties

	private var _state : UXTextFieldState;

	// }}}
	// {{{ public var ctrl : UXController<UXTextFieldState>;
	/**
	 * このコンポーネント内でのインタラクションを管理するコントローラークラスのインスタンスです。
	 */
	public var ctrl : UXController<UXTextFieldState>;
	// }}}
	// {{{ public function new()
	/**
	 * コンストラクタです。引数で指定したテキストを持つインスタンスを生成します。デフォルト値は空文字列です。
	 */
	public function new( ?t : String = "" )
	{
		super();
	}
	// }}}
	// {{{ public function refreshResource() : Void
	/**
	 * テキストフィールドに対するグローバルなリソースを再取得する関数です。
	 */
	public function refreshResource() : Void
	{
	}
	// }}}
	// {{{ public function update( updator : UXTextFieldState -> Void ) : Void
	/**
	 * このコンポーネントの状態を直接変更するメソッドです。状態のどんな操作も可能になるので、
	 * このメソッドの使用には注意が必要です。
	 */
	public function update( updator : UXTextFieldState -> Void ) : Void
	{
		updator( _state );
	}
	// }}}
}
// }}}
// {{{ class UXTextFieldInitInteraction extends UXInteraction<UXTextFieldState>
/**
 * UXTextFieldInitInteraction クラス<br>
 * テキストフィールドの初期化インタラクションです。
 */
class UXTextFieldInitInteraction extends UXInteraction<UXTextFieldState>
{
}
// }}}
// {{{ class UXInputInteraction extends UXInteraction<UXTextFieldState>
/**
 * UXInputInteraction クラス<br>
 * 文字入力を表すインタラクションです。
  */
class UXInputInteraction extends UXInteraction<UXTextFieldState>
{
}
// }}}
// {{{ class UXTextFieldHighlightInteraction extends UXInteraction<UXTextFieldState>
/**
 * UXTextFieldHighlightInteraction クラス<br>
 * highlight/delightに対するデフォルトインタラクションです。
 */
class UXTextFieldHighlightInteraction extends UXInteraction<UXTextFieldState>
{
}
// }}}
// {{{ class UXTextFieldFocusInteraction extends UXInteraction<UXTextFieldState>
/**
 * UXTextFieldFocusInteraction クラス<br>
 * focus/unfocusに対するデフォルトインタラクションです。
 */
class UXTextFieldFocusInteraction extends UXInteraction<UXTextFieldState>
{
}
// }}}
// {{{ class UXTextFieldResizeInteraction extends UXInteraction<UXTextFieldState>
/**
 * UXTextFieldResizeInteraction クラス<br>
 * 大きさを変更するデフォルトインタラクションです。
 */
class UXTextFieldResizeInteraction extends UXInteraction<UXTextFieldState>
{
}
// }}}
